第 12 章:基礎系統設定與備份
系統基本設定
網路設定:手動設定與 DHCP 自動取得
手動設定網路
- IP
- 子網路遮罩(netmask)
- 通訊閘(gateway)
- DNS 主機的 IP (通常會有兩個,若記不住的話,硬背 168.95.1.1 即可)
- 網路參數可自動取得 (dhcp 協定自動取得)
網卡的編號則有另一套規則,網卡的界面代號現在與網卡的來源有關
- eno1 :代表由主機板 BIOS 內建的網卡
- ens1 :代表由主機板 BIOS 內建的 PCI-E 界面的網卡
- enp2s0 :代表 PCI-E 界面的獨立網卡,可能有多個插孔,因此會有 s0, s1... 的編號~
- eth0 :如果上述的名稱都不適用,就回到原本的預設網卡編號
手動設定 IP 網路參數
- method: manual (手動設定)
- IP: 172.16.1.1
- netmask: 255.255.0.0
- gateway: 172.16.200.254
- DNS: 172.16.200.254
- hostname: study.centos.vbird
nmcli connection show
nmcli connection show [網卡代號]
nmcli connection show
NAME UUID TYPE DEVICE
eth0 505a7445-2aac-45c8-92df-dc10317cec22 802-3-ethernet eth0
# NAME 就是連線代號,通常與後面的網卡 DEVICE 會一樣!
# UUID 這個是特殊的裝置識別,保留就好不要理他!
# TYPE 就是網卡的類型,通常就是乙太網卡!
# DEVICE 當然就是網卡名稱囉!
# 從上面我們會知道有個 eth0 的連線代號,那麼來查察這個連線代號的設定為何?
nmcli connection show eth0
connection.id: eth0
connection.uuid: 505a7445-2aac-45c8-92df-dc10317cec22
connection.interface-name: eth0
connection.type: 802-3-ethernet
connection.autoconnect: yes
.....(中間省略).....
ipv4.method: manual
ipv4.dns:
ipv4.dns-search:
ipv4.addresses: 192.168.1.100/24
ipv4.gateway: --
.....(中間省略).....
IP4.ADDRESS[1]: 192.168.1.100/24
IP4.GATEWAY:
IP6.ADDRESS[1]: fe80::5054:ff:fedf:e174/64
IP6.GATEWAY:
如上表的輸出,最底下的大寫的 IP4, IP6 指的是目前的實際使用的網路參數,最上面的 connection 開頭的部份則指的是連線的狀態! 比較重要的參數鳥哥將它列出來如下:
- connection.autoconnect [yes|no] :是否於開機時啟動這個連線,預設通常是 yes 才對!
- ipv4.method [auto|manual] :自動還是手動設定網路參數的意思
- ipv4.dns [dns_server_ip] :就是填寫 DNS 的 IP 位址
- ipv4.addresses [IP/Netmask] :就是 IP 與 netmask 的集合,中間用斜線
/
來隔開 - ipv4.gateway [gw_ip] :就是 gateway 的 IP 位址
nmcli connection modify
nmcli connection modify eth0 \
>connection.autoconnect yes \
>ipv4.method manual \
>ipv4.addresses 172.16.1.1/16 \
>ipv4.gateway 172.16.200.254 \
>ipv4.dns 172.16.200.254# 上面只是『修改了設定檔』而已,要實際生效還得要啟動 (up) 這個 eth0 連線界面才行喔!
nmcli connection up eth0
nmcli connection show eth0.....(前面省略).....
IP4.ADDRESS[1]: 172.16.1.1/16
IP4.GATEWAY: 172.16.200.254
IP4.DNS[1]: 172.16.200.254
IP6.ADDRESS[1]: fe80::5054:ff:fedf:e174/64
IP6.GATEWAY:
自 動取得 IP 參數
nmcli connection modify eth0 \
>connection.autoconnect yes \
>ipv4.method auto
nmcli connection up eth0
nmcli connection show eth0
IP4.ADDRESS[1]: 172.16.2.76/16
IP4.ADDRESS[2]: 172.16.1.1/16
IP4.GATEWAY: 172.16.200.254
IP4.DNS[1]: 172.16.200.254
修改主機名稱
hostnamectl [set-hostname 你的主機名]# 1. 顯示目前的主機名稱與相關資訊
hostnamectl
Static hostname: study.centos.vbird # 這就是主機名稱
Icon name: computer
Chassis: n/a
Machine ID: 309eb890d09f440681f596543d95ec7a
Boot ID: b2de392ff1f74e568829c716a7166ecd
Virtualization: kvm
Operating System: CentOS Linux 7 (Core) # 作業系統名稱!
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-229.el7.x86_64 # 核心版本也提供!
Architecture: x86_64 # 硬體等級也提供!
# 2. 嘗試修改主機名稱為 www.centos.vbird 之後再改回來~
hostnamectl set-hostname www.centos.vbird
cat /etc/hostname
www.centos.vbird
hostnamectl set-hostname study.centos.vbird
日期與時間設定
時區的顯示與設定
timedatectl [commamd]
選項與參數:
list-timezones :列出系統上所有支援的時區名稱
set-timezone :設定時區位置
set-time :設定時間
set-ntp :設定網路校時系統# 1. 顯示目前的時區與時間等資訊
timedatectl
Local time: Tue 2015-09-01 19:50:09 CST # 本地時間
Universal time: Tue 2015-09-01 11:50:09 UTC # UTC 時間,可稱為格林威治標準時間
RTC time: Tue 2015-09-01 11:50:12
Timezone: Asia/Taipei (CST, +0800) # 就是時區囉!
NTP enabled: no
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
# 2. 顯示出是否有 New_York 時區?若有,則請將目前的時區更新一下
timedatectl list-timezones | grep -i new
America/New_York
America/North_Dakota/New_Salem
timedatectl set-timezone "America/New_York"
timedatectl
Local time: Tue 2015-09-01 07:53:24 EDT
Universal time: Tue 2015-09-01 11:53:24 UTC
RTC time: Tue 2015-09-01 11:53:28
Timezone: America/New_York (EDT, -0400)
timedatectl set-timezone "Asia/Taipei"# 最後還是要記得改回來台灣時區喔!不要忘記了!
時間的調整
# 1. 將時間調整到正確的時間點上!
timedatectl set-time "2015-09-01 12:02"
用 ntpdate 手動網路校時
ntpdate tock.stdtime.gov.tw
1 Sep 13:15:16 ntpdate[21171]: step time server 211.22.103.157 offset -0.794360 sec
hwclock -w
語系設定
語系設定
localectl
System Locale: LANG=zh_TW.utf8 # 底下這些資料就是『系統語系』
LC_NUMERIC=zh_TW.UTF-8
LC_TIME=zh_TW.UTF-8
LC_MONETARY=zh_TW.UTF-8
LC_PAPER=zh_TW.UTF-8
LC_MEASUREMENT=zh_TW.UTF-8
VC Keymap: cn
X11 Layout: cn
X11 Options: grp:ctrl_shift_toggle
locale
LANG=zh_TW.utf8 # 底下的則是『當前這個軟體的語系』資料!
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
.....(中間省略).....
LC_ALL=en_US.utf8
問:如果圖形界面將會是中文萬國碼的提示登入字元。如何改成英文語系的登入界面? 答:就是將 locale 改成 en_US.utf8 之後,再轉成圖形界面即可!
localectl set-locale LANG=en_US.utf8
systemctl isolate multi-user.target
systemctl isolate graphical.target
防火牆簡易設定
界域 (zone):依據不同的環境所設計的網路界域 (zone)
玩過網路後,你可能會聽過所謂的本機網路、NAT 與 DMZ 等網域,同時,可能還有可信任的 (trusted) 網域,或者是應該被抵擋 (drop/block) 的網域等等。 這些網域各有其功能~早期的 iptables 防火牆服務,所有的規則你都得要自己手動來撰寫,然後規則的細分得要自己去規劃, 所以很可能會導致一堆無法理解的規則。
新的 firewalld 服務就預先設計這些可能會被用到的網路環境,裡面的規則除了 public (公開網域) 這個界域 (zone) 之外,其它的界域則暫時為沒有啟動的狀況。 因此,在預設的情況下,如圖 20.1.2 當中的 2 號箭頭與 3 號箭頭處,你只要考慮 public 那個項目即可!其他的領域等到讀完伺服器篇之後再來討論。 所以,再說一次~你只要考慮 public 這個 zone 即可喔!
相關設定項目
防火牆規則通常需要設定的地方有:
- 服務:一般來說,如果你的 Linux server 是作為 Internet 的伺服器,提供的是比較一般的服務,那麼只要處理『服務』項目即可。預設你的伺服器已經提供了 ssh 與 dhcpv6-client 的服務埠口喔!
- 連接埠:如果你提供的服務所啟用的埠口並不是正規的埠口,舉例來說,為了玩 systemd 與 SELinux 我們曾經將 ssh 的埠口調整到 222 ,同時也曾經將 ftp 的埠口調整到 555 對吧!那如果你想要讓人家連進來,就不能只開放上面的『服務』項目,連這個『連接埠』的地方也需要調整才行!另外, 如果有某些比較特別的服務是 CentOS 預設沒有提供的,所以『服務』當然也就沒有存在!這時你也可以直接透過連接埠來搞定它!
- 豐富規則(rich rule):如果你有『整個網域』需要放行或者是拒絕的時候,那麼前兩個項目就沒有辦法適用, 這時就得要這個項目來處理了。不過鳥哥測試了 7.1 這一版的設定,似乎怪怪的~因此,底下我們會以 firewall-cmd 來增加這一個項目的設定。
- 介面:就是這個界域主要是針對哪一個網路卡來做規範的意思,我們只有一張網卡,所以當然就是 eth0 囉!
至於『偽裝』、『連接埠轉送』、『ICMP過濾器』、『來源』等等我們就不介紹了!畢竟那個是網路的東西,還不是在基礎篇應該要告訴你的項目。 好了!現在假設我們的 Linux server 是要作為底下的 幾個重要的服務與相關的網域功能,你該如何設定防火牆呢?
- 要作為 ssh, www, ftp, https 等等正規埠口的服務;
- 同時與前幾章搭配,還需要放行 port 222 與 port 555 喔!
- 區域網路 192.168.1.0/24 這一段我們目前想要直接放行這段網域對我們伺服器的連線
最後一個要處理的是區域網路的放行,我們剛剛談到這個部份恐怕目前的圖形界面軟體有點怪異~所以,這時你可以這樣下達指令即可! 注意,下列的指令全部都是必要參數,只有 IP 網段的部份可以變動掉即可!
firewall-cmd
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" \
>source address="192.168.1.0/24" accept'
success
firewall-cmd --reload
以系統內建 dmidecode 解析硬體配備
系統有個名為 dmidecode 的軟體,這個軟體挺有趣的,它可以解析 CPU 型號、主機板型號與記憶體相關的型號等等~ 相當的有幫助!尤其是在升級配備上面!現在讓我們來查一查鳥哥的虛擬機裡頭有啥東西吧!
dmidecode
dmidecode -t type
選項與參數:
詳細的 type 項目請 man dmidecode 查詢更多的資料,這裡僅列出比較常用的項目:
1 :詳細的系統資料,含主機板的型號與硬體的基礎資料等
4 :CPU 的相關資料,包括倍頻、外頻、核心數、核心緒數等
9 :系統的相關插槽格式,包括 PCI, PCI-E 等等的插槽規格說明
17:每一個記憶體插槽的規格,若內有記憶體,則列出該記憶體的容量與型號範例一:秀出整個系統的硬體資訊,例如主機板型號等等
dmidecode -t 1
# dmidecode 2.12
SMBIOS 2.4 present.
Handle 0x0100, DMI type 1, 27 bytes
System Information
Manufacturer: Red Hat
Product Name: KVM
Version: RHEL 6.6.0 PC
Serial Number: Not Specified
UUID: AA3CB5D1-4F42-45F7-8DBF-575445D3887F
Wake-up Type: Power Switch
SKU Number: Not Specified
Family: Red Hat Enterprise Linux
範例二:那記憶體相關的資料呢?
dmidecode -t 17
# dmidecode 2.12
SMBIOS 2.4 present.
Handle 0x1100, DMI type 17, 21 bytes
Memory Device
Array Handle: 0x1000
Error Information Handle: 0x0000
Total Width: 64 bits
Data Width: 64 bits
Size: 3072 MB
Form Factor: DIMM
Set: None
Locator: DIMM 0
Bank Locator: Not Specified
Type: RAM
Type Detail: None
硬體資源的收集與分析
除了直接呼叫出 /proc 底下的檔案內容之外,其實 Linux 有提供幾個簡單的指令來將核心所偵測到的硬體叫出來的~ 常見的指令有底下這些:
- gdisk:可以使用
gdisk -l
將分割表列出 - dmesg:觀察核心運作過程當中所顯示的各項訊息記錄
- vmstat:可分析系統 (CPU/RAM/IO) 目前的狀態
- lspci:列出整個 PC 系統的 PCI 介面裝置!很有用的指令
- lsusb:列出目前系統上面各個 USB 埠口的狀態,與連接的 USB 裝置
- iostat:與 vmstat 類似,可即時列出整個 CPU 與周邊設備的 Input/Output 狀態
lspci 列出整個 PC 系統的 PCI 介面裝置
lspci
lspci [-vvn]
選項與參數:
-v :顯示更多的 PCI 介面裝置的詳細資訊;
-vv :比 -v 還要更詳細的細部資訊;
-n :直接觀察 PCI 的 ID 而不是廠商名稱範例一:查閱您系統內的 PCI 匯流排相關裝置:
lspci00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01)
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Red Hat, Inc. QXL paravirtual graphic card (rev 04)
00:03.0 Ethernet controller: Red Hat, Inc Virtio network device
00:04.0 SCSI storage controller: Red Hat, Inc Virtio block device
00:05.0 RAM memory: Red Hat, Inc Virtio memory balloon
00:06.0 Audio device: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio
Controller (rev 01)
00:1d.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)
00:1d.1 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)
00:1d.2 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)
00:1d.7 USB controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)
# 不必加任何的參數,就能夠顯示出目前主機上面的各個 PCI 介面的裝置呢!
不必加上任何選項,就能夠顯示出目前的硬體配備為何。上面就是鳥哥的測試機所使用的主機配備。 包括使用 Intel 晶片的模擬主機板、南橋使用 ICH9 的控制晶片、附掛 QXL 的顯示卡、使用虛擬化的 Virtio 網路卡等等。 您瞧瞧!很清楚,不是嘛。
如果你還想要瞭解某個設備的詳細資訊時,可以加上 -v 或 -vv 來顯示更多的資訊喔! 舉例來說,鳥哥想要知道那個乙太網路卡更詳細的資訊時,可以使用如下的選項來處理:
lspci -s 00:03.0 -vv
- s 後面接的那個怪東西每個設備的匯流排、插槽與相關函數功能啦!那個是我們硬體偵測所得到的數據囉! 你可以對照底下這個檔案來瞭解該串數據的意義:
/usr/share/hwdata/pci.ids
其實那個就是 PCI 的標準 ID 與廠牌名稱的對應表啦!此外,剛剛我們使用 lspci 時,其實所有的資料都是由 /proc/bus/pci/ 目錄下的資料所取出的呢!瞭解了吧! ^_^!不過,由於硬體的發展太過迅速,所以你的 pci.ids 檔案可能會落伍了~那怎辦? 沒關係~可以使用底下的方式來線上更新你的對應檔:
update-pciids
lsusb 列出目前系統上面各個 USB 埠口的狀態
剛剛談到的是 PCI 介面裝置,如果是想要知道系統接了多少個 USB 裝置呢?那就使用 lsusb 吧!這個指令也是很簡單的!
lsusb
lsusb [-t]
選項與參數:
-t :使用類似樹狀目錄來顯示各個 USB 埠口的相關性範例一:列出目前鳥哥的測試用主機 USB 各埠口狀態
lsusb
Bus 002 Device 002: ID 0627:0001 Adomax Technology Co., Ltd
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
# 如上所示,鳥哥的主機在 Bus 002 有接了一個設備,
# 該設備的 ID 是 0627:0001,對應的廠商與產品為 Adomax 的設備。
確實非常清楚吧!其中比較有趣的就屬那個 ID 號碼與廠商型號對照了!那也是寫入在 /usr/share/hwdata/pci.ids 的東西,你也可以自行去查詢一下喔!
iostat 列出整個 CPU 與周邊設備的 Input/Output 狀態
iostat
iostat [-c|-d] [-k|-m] [-t] [間隔秒數] [偵測次數]
選項與參數:
-c :僅顯示 CPU 的狀態;
-d :僅顯示儲存設備的狀態,不可與 -c 一起用;
-k :預設顯示的是 block ,這裡可以改成 K bytes 的大小來顯示;
-m :與 -k 類似,只是以 MB 的單位來顯示結果。
-t :顯示日期出來;範例一:顯示一下目前整個系統的 CPU 與儲存設備的狀態
iostat
Linux 3.10.0-229.el7.x86_64 (study.centos.vbird) 09/02/2015 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.08 0.01 0.02 0.00 0.01 99.88
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 0.46 5.42 3.16 973670 568007
scd0 0.00 0.00 0.00 154 0
sda 0.01 0.03 0.00 4826 0
dm-0 0.23 4.59 3.09 825092 555621
# 瞧!上面數據總共分為上下兩部分,上半部顯示的是 CPU 的當下資訊;
# 下面數據則是顯示儲存裝置包括 /dev/vda 的相關數據,他的數據意義:
# tps :平均每秒鐘的傳送次數!與資料傳輸『次數』有關,非容量!
# kB_read/s :開機到現在平均的讀取單位;
# kB_wrtn/s :開機到現在平均的寫入單位;
# kB_read :開機到現在,總共讀出來的檔案單位;
# kB_wrtn :開機到現在,總共寫入的檔案單位;範例二:僅針對 vda ,每兩秒鐘偵測一次,並且共偵測三次儲存裝置
iostat -d 2 3 vda
Linux 3.10.0-229.el7.x86_64 (study.centos.vbird) 09/02/2015 _x86_64_ (4 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 0.46 5.41 3.16 973682 568148
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 1.00 0.00 0.50 0 1
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 0.00 0.00 0.00 0 0
# 仔細看一下,如果是有偵測次數的情況,那麼第一次顯示的是『從 開機到現在的數據』,
# 第二次以後所顯示的資料則代表兩次偵測之間的系統傳輸值!舉例來說,上面的資訊中,
# 第二次顯示的資料,則是兩秒鐘內(本案例)系統的總傳輸量與平均值。
瞭解磁碟的健康狀態
SMART 其實是『 Self-Monitoring, Analysis and Reporting Technology System 』的縮寫,主要用來監測目前常見的 ATA 與 SCSI 界面的磁碟, 只是,要被監測的磁碟也必須要支援 SMART 的協定才行!否則 smartd 就無法去下達指令,讓磁碟進行自我健康檢查。smartd 提供一隻指令名為 martctl,這個指令功能非常多。
smartctl
# 1. 用 smartctl 來顯示完整的 /dev/sda 的資訊
smartctl -a /dev/sda
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-229.el7.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org
# 首先來輸出一下這部磁碟的整體資訊狀況!包括製造商、序號、格式、SMART 支援度等等!
=== START OF INFORMATION SECTION ===
Device Model: QEMU HARDDISK
Serial Number: QM00002
Firmware Version: 0.12.1
User Capacity: 2,148,073,472 bytes [2.14 GB]
Sector Size: 512 bytes logical/physical
Device is: Not in smartctl database [for details use: -P showall]
ATA Version is: ATA/ATAPI-7, ATA/ATAPI-5 published, ANSI NCITS 340-2000
Local Time is: Wed Sep 2 18:10:38 2015 CST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
# 接下來則是一堆基礎說明!鳥哥這裡先略過這段資料喔!
General SMART Values:
Offline data collection status: (0x82) Offline data collection activity
was completed without error.
Auto Offline Data Collection: Enabled.
.....(中間省略).....
# 再來則是有沒有曾經發生過磁碟錯亂的問題登錄!
SMART Error Log Version: 1
No Errors Logged
# 當你下達過磁碟自我檢測的過程,就會被記錄在這裡了!
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Short offline Completed without error 00% 4660 -
# 2 Short offline Completed without error 00% 4660 -
# 2. 命令磁碟進行一次自我檢測的動作,然後再次觀察磁碟狀態!
smartctl -t short /dev/sda
smartctl -a /dev/sda.....(前面省略).....
# 底下會多出一個第三筆的測試資訊!看一下 Status 的狀態,沒有問題就是好消息!
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Short offline Completed without error 00% 4660 -
# 2 Short offline Completed without error 00% 4660 -
# 3 Short offline Completed without error 00% 4660 -